﻿using System;
using System.Collections.Generic;

namespace Pap.Data
{
    /// <summary>
    /// 
    /// </summary>
    public interface ICustomerLoan : IEntity
    {
        /// <summary>
        /// Gets or sets the loan ID.
        /// </summary>
        /// <value>
        /// The loan ID.
        /// </value>
        Guid LoanID { get; set; }
        /// <summary>
        /// Gets or sets the loan number.
        /// </summary>
        /// <value>
        /// The loan number.
        /// </value>
        int LoanNumber { get; set; }
        /// <summary>
        /// Gets or sets the customer ID.
        /// </summary>
        /// <value>
        /// The customer ID.
        /// </value>
        Guid CustomerID { get; set; }
        /// <summary>
        /// Gets or sets the guarantor ID.
        /// </summary>
        /// <value>
        /// The guarantor ID.
        /// </value>
        Guid? GuarantorID { get; set; }
        /// <summary>
        /// Gets or sets the project stage ID.
        /// </summary>
        /// <value>
        /// The project stage ID.
        /// </value>
        Guid ProjectStageID { get; set; }
        /// <summary>
        /// Gets or sets the committee ID.
        /// </summary>
        /// <value>
        /// The committee ID.
        /// </value>
        Guid CommitteeID { get; set; }
        /// <summary>
        /// Gets or sets the name of the loan.
        /// </summary>
        /// <value>
        /// The name of the loan.
        /// </value>
        string LoanName { get; set; }
        /// <summary>
        /// Gets or sets the loan address.
        /// </summary>
        /// <value>
        /// The loan address.
        /// </value>
        string LoanAddress { get; set; }
        /// <summary>
        /// Gets or sets the loan place type ID.
        /// </summary>
        /// <value>
        /// The loan place type ID.
        /// </value>
        Guid LoanPlaceTypeID { get; set; }
        /// <summary>
        /// Gets or sets the loan amount.
        /// </summary>
        /// <value>
        /// The loan amount.
        /// </value>
        double LoanAmount { get; set; }
        /// <summary>
        /// Gets or sets the loan payment period.
        /// </summary>
        /// <value>
        /// The loan payment period.
        /// </value>
        int LoanPaymentPeriod { get; set; }
        /// <summary>
        /// Gets or sets the family current debts.
        /// </summary>
        /// <value>
        /// The family current debts.
        /// </value>
        string FamilyCurrentDebts { get; set; }
        /// <summary>
        /// Gets or sets the legal form ID.
        /// </summary>
        /// <value>
        /// The legal form ID.
        /// </value>
        Guid LegalFormID { get; set; }
        /// <summary>
        /// Gets or sets the loan type ID.
        /// </summary>
        /// <value>
        /// The loan type ID.
        /// </value>
        Guid LoanTypeID { get; set; }
        /// <summary>
        /// Gets or sets the loan created date.
        /// </summary>
        /// <value>
        /// The loan created date.
        /// </value>
        DateTime LoanCreatedDate { get; set; }
        /// <summary>
        /// Gets or sets the relation with managers.
        /// </summary>
        /// <value>
        /// The relation with managers.
        /// </value>
        string RelationWithManagers { get; set; }
        /// <summary>
        /// Gets or sets the receipt ID.
        /// </summary>
        /// <value>
        /// The receipt ID.
        /// </value>
        Nullable<Guid> ReceiptID { get; set; }
        /// <summary>
        /// Gets or sets the loan payment method ID.
        /// </summary>
        /// <value>
        /// The loan payment method ID.
        /// </value>
        Guid LoanPaymentMethodID { get; set; }
        /// <summary>
        /// Gets or sets a value indicating whether this instance is loan project exist.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is loan project exist; otherwise, <c>false</c>.
        /// </value>
        bool IsLoanProjectExist { get; set; }
        /// <summary>
        /// Gets or sets the responsible ID.
        /// </summary>
        /// <value>
        /// The responsible ID.
        /// </value>
        Guid ResponsibleID { get; set; }

        /// <summary>
        /// Gets the customer obj.
        /// </summary>
        ICustomer CustomerObj { get; }
        /// <summary>
        /// Gets the guarantor obj.
        /// </summary>
        ICustomer GuarantorObj { get; }
        /// <summary>
        /// Gets the project stage.
        /// </summary>
        IProjectStage ProjectStage { get; }
        /// <summary>
        /// Gets the committee obj.
        /// </summary>
        ICommittee CommitteeObj { get; }
        /// <summary>
        /// Gets the responsible user obj.
        /// </summary>
        IUser ResponsibleUserObj { get; }
        /// <summary>
        /// Gets the loan type obj.
        /// </summary>
        ILookUpEntity LoanTypeObj { get; }
        /// <summary>
        /// Gets the loan payment method obj.
        /// </summary>
        ILoanPaymentMethod LoanPaymentMethodObj { get; }
        /// <summary>
        /// Gets the board loan obj.
        /// </summary>
        IBoardLoan BoardLoanObj { get; }

        /// <summary>
        /// Gets the feasibility study obj.
        /// </summary>
        ILoanFeasibilityStudy FeasibilityStudyObj { get; }
        /// <summary>
        /// Gets the social resarch obj.
        /// </summary>
        ILoanSocialResearch SocialResarchObj { get; }
        /// <summary>
        /// Gets or sets the receipt.
        /// </summary>
        /// <value>
        /// The receipt.
        /// </value>
        IReceipt Receipt { get; set; }
        /// <summary>
        /// Gets the loan execution LST.
        /// </summary>
        IEnumerable<ILoanExecution> LoanExecutionLst { get; }
    }

}
